package ru.mirent;

import io.qameta.allure.Allure;
import io.qameta.allure.model.TestResult;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;
import java.util.function.Consumer;

/**
 * Пример скрытия блока с результатом теста, расположенном в шаге теста в нижней части экрана.
 * Скрытие происходит путем выполнения скрипта, добавленного через блок 'Description' в отчет.
 * Оба тесто в классе намеренно зафэйлены для демонстрации.
 */
public class AllureHideTestDataBlockTest {

    /**
     * Обычный шаг с выводом ошибки.
     */
    @Test
    void testWithBottomResultBlockTest() {
        Allure.step("Развернуть этот шаг для просмотра разницы в обоих тестах класса", stepOutContext -> {
            dummyStep();
        });
    }

    /**
     * Шаг со скрытым нижним блоком ошибки и верхним блоком со словом 'Description'.
     */
    @Test
    void testWithoutBottomResultBlockTest() {
        Allure.step("Внешний шаг", stepOutContext -> {
            String descriptionWithHideScript = FileUtils.readFileToString(
                    new File("src/test/resources/descriptions/hide_test_data_block.html"), "UTF-8");

            Allure.getLifecycle().updateTestCase(new Consumer<TestResult>() {
                @Override
                public void accept(TestResult testResult) {
                    testResult.setDescriptionHtml(descriptionWithHideScript);
                }
            });

            dummyStep();
        });
    }

    /**
     * Фиктивный шаг для Allure-отчета с выводом сообщений об ошибке.
     */
    private void dummyStep() {
        String errorMessage = "Подробное сообщение об ошибке";

        Allure.addAttachment("Подробне", MimeTypes.TEXT_PLAIN.getContentType(), errorMessage);
        throw new AssertionError(errorMessage);
    }
}
